home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
076-100
/
087
/
dropshadow
/
hooks.asm
< prev
next >
Wrap
Assembly Source File
|
1995-03-13
|
1KB
|
76 lines
; hooks.asm -- intervene (layers) library vectors
; :ts=8
; this program copyright 1987, james mackraz. may not be distributed
; for profit. copies of the source may be made for not-for-profit
; distribution, but must include this notice.
;
; james mackraz, 4021 Second Street, Palo Alto, CA, 94306
include 'exec/types.i'
STRUCTURE HK,0
LONG HK_SYSFUNC
LONG HK_MYFUNC
LONG HK_ENTRY
WORD HK_TEST
LONG HK_LVO
LABEL HK_SIZE
MACRO UNIQUEHOOK
public _entry%1
_entry%1:
movem.l regboys,-(sp)
jsr _geta4
; address of hook struct serves as unique id
lea _myhooks + (%1 * HK_SIZE),a3
jsr commonhook
movem.l (sp)+,regboys
rts
ENDM
regboys reg d1/d2/d3/d5/a0/a1/a2/a3/a4/a5/a6
; uses registers that specific system functions
; do not use, and will preserve.
; d3 -- aztec may trash
; d5 -- used in test
; a3 -- hook table entry
; a4 -- aztec context
; a5 -- called through
; a6 -- aztec may trash
dseg
public _myhooks
cseg
public _geta4
;------ unique entry points for each layer vector stolen
UNIQUEHOOK 0
UNIQUEHOOK 1
UNIQUEHOOK 2
UNIQUEHOOK 3
UNIQUEHOOK 4
UNIQUEHOOK 5
UNIQUEHOOK 6
commonhook:
; *** test condition (two versions)
move.l HK_SYSFUNC(a3),a5
jsr (a5)
; *** call conditionally, based on test
;------ save/pass myfunc the sysfunc return value
move.l d0,-(sp)
move.l HK_MYFUNC(a3),a5
jsr (a5)
move.l (sp)+,d0
rts
end